package com.appspot.your_app.test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import com.appspot.your_app.R; import com.appspot.your_app.SubscribeApp; import com.appspot.your_app.subscribe.Subscribe; import com.appspot.your_app.subscribe.model.SubscribeApiMessagesEmailAddressMessage; import com.appspot.your_app.subscribe.model.SubscribeApiMessagesRequestMessage; import com.appspot.your_app.subscribe.model.SubscribeApiMessagesResponseMessage; import com.google.api.client.extensions.android.http.AndroidHttp; import com.google.api.client.json.gson.GsonFactory; import android.content.Context; import android.os.AsyncTask; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.widget.Button; import android.widget.EditText; /** * Class defination for SubscribeAppTest * * <p> * Unit test class for SubscribeApp * </p> * * <p> * These class contains three unit cases to test subscription application. The test cases covers UI testing as well as function testing. * </p> * * @author Ruchita Dhariya * */ public class SubscribeAppTest extends ActivityInstrumentationTestCase2<SubscribeApp>{ private SubscribeApp subscribeApp; private EditText email; private EditText subject; private EditText body; private Button btnSend; Context context; SubscribeApiMessagesResponseMessage responseMessage; CountDownLatch signal = new CountDownLatch(1); public SubscribeAppTest() { super(SubscribeApp.class); } @Override protected void setUp() throws Exception { super.setUp(); //Create an intent to launch target Activity subscribeApp = getActivity(); //get context for the target context = getInstrumentation().getTargetContext(); responseMessage = null; email=(EditText) subscribeApp.findViewById(R.id.email); subject=(EditText) subscribeApp.findViewById(R.id.subject); body=(EditText) subscribeApp.findViewById(R.id.body); btnSend = (Button) subscribeApp.findViewById(R.id.sendbtn); } /** * Tests the preconditions of this test fixture. */ @MediumTest public void testPreconditions() { //Start the activity under test in isolation, without values for savedInstanceState and //lastNonConfigurationInstance assertNotNull("mLaunchActivity is null", getActivity()); assertNotNull("EmailEditText is null", email); assertNotNull("subject is null", subject); assertNotNull("body is null", body); assertNotNull("send button is null", btnSend); } /** * Tests the correctness of the initial text. */ @MediumTest public void testTextView_labelText() { //It is good practice to read the string from your resources in order to not break //multiple tests when a string changes. final String expected_email = subscribeApp.getString(R.string.placeholder_emailaddress); final String actual_email = email.getHint().toString(); assertEquals("Email contains wrong text", expected_email, actual_email); final String expected_subject = subscribeApp.getString(R.string.placeholder_subject); final String actual_subject = subject.getHint().toString(); assertEquals("Email contains wrong text", expected_subject, actual_subject); final String expected_body = subscribeApp.getString(R.string.placeholder_body); final String actual_body = body.getHint().toString(); assertEquals("Email contains wrong text", expected_body, actual_body); final String expected_btnlbl = subscribeApp.getString(R.string.btn_sendemail); final String actual_btnlbl = btnSend.getText().toString(); assertEquals("Send button label is wrong", expected_btnlbl, actual_btnlbl); } /** * Tests the correct data is received */ @LargeTest public void testResponse(){ final String expected_to_email = ""; final String expected_subject = "Junit Test"; final String expected_body = "Good Luck!"; try { runTestOnUiThread(new Runnable() { public void run() { new SendingAsyncTask().execute(expected_subject, expected_body, expected_to_email); // Asynctask for background processing } }); signal.await(20, TimeUnit.SECONDS); } catch (Throwable e) { e.printStackTrace(); } assertEquals("Email Sending is fail.", Boolean.TRUE, responseMessage.getSuccess()); } private class SendingAsyncTask extends AsyncTask <String, Void, SubscribeApiMessagesResponseMessage> { protected SubscribeApiMessagesResponseMessage doInBackground(String...params) { SubscribeApiMessagesResponseMessage response = null; try { Subscribe.Builder builder = new Subscribe.Builder( AndroidHttp.newCompatibleTransport(), new GsonFactory(), null); builder.setApplicationName(context.getString(R.string.app_name)); Subscribe service = builder.build(); SubscribeApiMessagesRequestMessage Subscrib = new SubscribeApiMessagesRequestMessage(); //Subscribe object for set message, body and email Subscrib.setBody(params[1]); Subscrib.setSubject(params[0]); Subscrib.setPrivateKey(context.getString(R.string.private_key)); Subscrib.setSender(context.getString(R.string.email_sender)); SubscribeApiMessagesEmailAddressMessage Email = new SubscribeApiMessagesEmailAddressMessage(); // Should refer to EmailAddressMessage object in python file Email.setEmailAddress(params[2]); List <SubscribeApiMessagesEmailAddressMessage> ListofEmail = new ArrayList <SubscribeApiMessagesEmailAddressMessage> (); ListofEmail.add(Email); Subscrib.setEmailAddresses(ListofEmail); response = service.send().emails(Subscrib).execute(); } catch (Exception e) { e.printStackTrace(); } return response; } protected void onPostExecute(SubscribeApiMessagesResponseMessage email) { //Clear the progress dialog and the fields responseMessage = email; } } }